<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1.JS延迟加载的方式有哪些？（5）
        // script标签defer属性
        // 脚本代码写在body标签之后

        // 2.前端 JavaScript 中的 ECMAScript、DOM、BOM 的含义；
        // ECMAScript:      javascript的核心，规定了js的语法规范
        // DOM:    文档对象模型（提供与网页内容交互的方法和接口）
        // BOM:    浏览器对象模型（提供与浏览器交互的方法和接口）

        // 3.JavaScript 的数据类型有哪些？
        // 基本数据类型
        // string、Number、Boolean、Null、Undefined、Symbol
        // 引用数据类型
        // Object、Array、Function

        // 4.如何进行数据类型的判断？
        // typeof 
        // instanceof
        // Object.prototype.toString.call()

        // 5.null 和 undefined 的区别？什么时候会得到 undefined？
        // undefined
        // 声明变量未加以初始化就会返回undefined值, 表示空值
        // null
        // 表示空值， 空对象(不存在的对象)
        // 当使用var或let声明了变量但没有初始化，就相当于给变量赋了undefined值

        // 6.如何理解 null == undefined 返回 true，null === undefined 返回 false？
        // null == undefined
        // 判断值, 两者都是空值
        // null === undefined
        // 判断值和数据类型

        // 7.使用 continue 或 break 终止循环时，两种方式的区别是？
        // break 中断所有的控制流程
        // continue 跳出当前符合条件的流程，继续下一个流程

        // 8.如何判断字符串内是否包含指定字符？
        // indexOf
        // lastIndexOf
        // includes

        // 9.请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；
        // 修改原数组
        //     reverse
        //     splice
        //     push
        //     pop
        //     unshift
        //     shift
        //     sort    
        // 不修改原数组
        //     slice
        //     concat
        //     join    
        //     indexOf
        //     lastIndexOf

        // 10. var、let、const 区别？
        // var 声明的范围是函数作用域
        // let 声明的范围是块级作用域
        // const 声明的范围是块级作用域，声明变量时必须同时初始化变量
        
        // 12. 如何在 DOM2 级事件绑定上传递参数？

        // 13. 怎么阻止事件的进一步传播和默认事件？
        // event.preventDefault()----------正常浏览器通用
        // window.event.returnValue = false ---- IE浏览器

        // 14. 如何添加一个一次性事件？
        
        // 15. 同步和异步的区别?
        // 同步
        // 发出一个功能调用时,必须一件一件事做，等前一件做完了才能做下一件事。
        // 异步
        // 当一个异步过程调用发出后，调用者在没有得到结果之前，就可以继续执行后续操作。

        // 16. AJAX是什么？AJAX是如何为页面注入灵魂？
        // ajax ------ 执行异步网络请求, 是一种创建动态网页技术
        // ajax是一种在无需刷新加载整个网页的情况下, 能够更新部分网页内容的技术

        // 17. 开发阶段的 AJAX 跨域有哪些解决方法，jsonp 的原理是什么
        // 解决方法
        // jsonp、正向代理和反向代理
        // jsonp原理
        // 利用script的src属性, 不考虑跨域问题

        // 18. 请描述一下cookies，sessionStorage和localStorage的区别
        // cookie
        // 用于存储web页面的用户信息，可以设置cookie过期时间，限制大小为4kb左右, 超出部分会被裁切
        // sessionStorage
        // 是本地存储的方式，以键值对形式进行存储，只存储会话数据，数据只会存储到浏览器关闭
        // localStorage
        // 是本地存储的方式，以键值对形式进行存储，用于长久保留整个网页的数据, 保存的数据没有过期时间, 直到手动去除浏览器缓存

        // 19. 讲一下常见的异步场景，以及传统异步的诟病和解决方案

        // 20. 数组如何实现去重？请提供至少2种方法
        // indexOf方法
        // 数组的indexOf()方法可返回某个指定的元素在数组中首次出现的位置，该方法首先定义一个空数组newArr，
        // 然后调用indexOf方法对原来的数组进行遍历判断，如果元素不在newArr中，则将其push进newArr中，
        // 最后将newArr返回即可获得去重的数

        // 21. 讲一下对基本数据类型 和 复杂/引用数据类型的理解？
        // 当描述简单的变量时，就用基本数据类型
        // 当描述复杂的变量时，就用复杂/引用数据类型

        // 22. this 的指向如何确定？
        // 根据函数的调用方式的不同，this会指向不同的对象:
        // 以函数的形式调用时，this指向的是window;
        // 以方法的形式调用时，this就是调用方法的那个对象;
        // 以构造函数的形式调用时，this就是新创建的那个对象;

        // 23. 谈谈对垃圾回收机制的认识
        
        // 24. 什么是回流重绘，如何进行优化？
        // 回流
        // 回流是布局或者几何属性需要改变就称为回流
        // 重绘
        // 当一个元素自身的宽高，布局，及显示或隐藏没有改变，而只是改变了元素的外观样式的时候，就产生了重绘。

        // 25. 请解释什么是事件代理
        // 事件代理---事件代理的实现原理是利用冒泡和目标元素, 把处理的事件添加到父元素, 
        //            等待子元素事件的冒泡, 并且可以通过父元素event.target判断哪个是子元素, 从而做出处理

        // 26. 谈谈你对渐进增强和优雅降级的理解(补充)
       

    </script>
</body>

</html>